package pe.gob.mef.snip.preinversion.controller;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pe.gob.mef.snip.preinversion.domain.Alternativa;
import pe.gob.mef.snip.preinversion.domain.CostoOpeMan;
import pe.gob.mef.snip.preinversion.domain.Cronograma;
import pe.gob.mef.snip.preinversion.domain.GastoReposicion;
import pe.gob.mef.snip.preinversion.domain.MetaBanco;
import pe.gob.mef.snip.preinversion.domain.ProyectoBanco;
import pe.gob.mef.snip.preinversion.service.AlternativaService;
import pe.gob.mef.snip.preinversion.service.CostoOpeManService;
import pe.gob.mef.snip.preinversion.service.CronogramaService;
import pe.gob.mef.snip.preinversion.service.GastoReposicionService;
import pe.gob.mef.snip.preinversion.service.MetaBancoService;
import pe.gob.mef.snip.preinversion.service.ProyectoBancoService;
import pe.gob.mef.snip.preinversion.util.ServiceException;

@Controller
public class ComponenteController {

	protected final Log log = LogFactory.getLog(getClass());
	
	@Autowired
	private MetaBancoService metaBancoService;
	@Autowired
	private ProyectoBancoService proyectoBancoService;
	@Autowired
	private CronogramaService cronogramaService;
	@Autowired
	private CostoOpeManService costoOpeManService;
	@Autowired
	private GastoReposicionService gastoReposicionService;
	
	private MetaBanco metaBanco;
	private ProyectoBanco proyectoBanco;	
	private Cronograma cronograma;
	private CostoOpeMan costoOpeMan;
	private GastoReposicion gastoReposicion;
	
	@RequestMapping("/componenteSnip03Listar")
	public ModelAndView componenteSnip03Listar(HttpServletRequest request, HttpServletResponse response) {
		
		
		if (log.isDebugEnabled()) log.debug("componenteSnip03Listar(HttpServletRequest,HttpServletResponse");
	    HttpSession session = request.getSession();	
		Map<String, Object> componenteSnip03Map = new HashMap<String, Object>();
		
	    String viewName = "";
		try{
			
			if(session.getAttribute("proyecto") == null || session.getAttribute("proyecto") == ""){
				viewName = "errorPage";
			}else{
				componenteSnip03Map.put("proyecto", session.getAttribute("proyecto"));
				componenteSnip03Map.put("version", session.getAttribute("version"));
						
				viewName = "frmComponentes";			
			}
			
			
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		//return new ModelAndView(viewName,"alternativasSnip03Map",componenteSnip03Map);
		return new ModelAndView("frmComponentes","alternativasSnip03Map",componenteSnip03Map);
		
	}
	
	
	@RequestMapping("/componenteSnip03Grabar")
	public ModelAndView componenteSnip03Grabar(HttpServletRequest request, HttpServletResponse response) {
		
		if (log.isDebugEnabled()) log.debug("componenteSnip03Grabar(HttpServletRequest,HttpServletResponse");
	    HttpSession session = request.getSession();	
		Map<String, Object> componenteSnip03Map = new HashMap<String, Object>();
		
		proyectoBanco = new ProyectoBanco();
		metaBanco  = new MetaBanco();
		proyectoBanco = new  ProyectoBanco();	
		cronograma = new  Cronograma();
		costoOpeMan = new  CostoOpeMan();
		gastoReposicion = new  GastoReposicion();	    
		String viewName = "";
	       
		try{	
			
			if(session.getAttribute("proyecto") == null || session.getAttribute("proyecto") == ""){
				viewName = "errorPage";
			}else{
				componenteSnip03Map.put("proyecto", session.getAttribute("proyecto"));
				componenteSnip03Map.put("version", session.getAttribute("version"));
				
				metaBanco.setProyecto(new BigDecimal((String)request.getParameter("hd_proyecto")));
				metaBanco.setVersion(new BigDecimal((String)request.getParameter("hd_version")));
				metaBanco.setProyecto(new BigDecimal((String)request.getParameter("hd_meta")));
				metaBanco.setNombre(request.getParameter("txt_nombreComponente"));
				metaBanco.setUnidadMed(request.getParameter("txt_unidadComponente"));
				metaBancoService.insertar(metaBanco);
											
				proyectoBanco.setProyecto(new BigDecimal((String)request.getParameter("hd_proyecto")));
				proyectoBanco.setVersion(new BigDecimal((String)request.getParameter("hd_version")));
				proyectoBanco.setAniomesInicEje(request.getParameter("sel_mesInicioEjecucion"));
				proyectoBanco.setAniomesInicEje(request.getParameter("sel_mesInicioEjecucion"));	
				proyectoBanco.setFuenteFinanc(request.getParameter("sel_fuenteFinanciamiento"));
				proyectoBanco.setIdtipoejecucion(new BigDecimal((String) request.getParameter("sel_modalidadEjecucion")));
				proyectoBanco.setCreditoExterno(request.getParameter("rad_creditoExterno"));
				proyectoBancoService.actualizar(proyectoBanco);
				
				cronograma.setProyecto(new BigDecimal((String)request.getParameter("hd_proyecto")));
				cronograma.setMeta(Integer.parseInt((String)request.getParameter("hd_meta")));
				cronograma.setVersion(new BigDecimal((String)request.getParameter("hd_version")));
				cronograma.setFechaAno(new BigDecimal((String)request.getParameter("hd_fechaAnio")));			
				cronograma.setAnoinv(new BigDecimal((String)request.getParameter("hd_fechaAnio")));
				cronograma.setCantidadFinan(new BigDecimal((String)request.getParameter("hd_proyecto")));
				cronogramaService.insertar(cronograma);
				
				viewName = "frmComponentes";			
			}
		
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return new ModelAndView(viewName,"componenteSnip03Map",componenteSnip03Map);
	}

	
	
}

